#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
AIOT智能学习桌项目 - 启动菜单
方便用户选择要运行的功能模块
"""

import os
import sys
import subprocess
import time

def print_banner():
    """打印项目横幅"""
    print("\n" + "="*80)
    print("🎯 AIOT智能学习桌项目 - 启动菜单")
    print("="*80)
    print("📚 基于EBP3901开发板的智能学习辅助系统")
    print("💡 功能：语音交互 + 坐姿监测 + 数据分析")
    print("🔧 技术：AI算法 + 计算机视觉 + 物联网")
    print("="*80)

def print_menu():
    """打印功能菜单"""
    print("\n📋 可运行的功能模块:")
    print("="*50)
    print("1. 🎮 完整系统仿真 (推荐)")
    print("   - 智能学习桌完整功能演示")
    print("   - 包含语音交互、坐姿监测、数据分析")
    print("   - 实时状态显示和警报系统")
    print()
    print("2. 🎤 语音识别集成版本 (新功能)")
    print("   - 集成SpeechRecognition库")
    print("   - 支持中文语音命令控制")
    print("   - 语音播报和实时交互")
    print()
    print("3. 🗣️ 语音识别模块测试")
    print("   - 单独测试语音识别功能")
    print("   - 多种识别模式演示")
    print("   - 识别统计和性能测试")
    print()
    print("4. 📹 摄像头坐姿检测")
    print("   - 基于AI的坐姿分析")
    print("   - 实时姿态评估")
    print("   - 个性化建议生成")
    print()
    print("5. 🧠 自适应学习测试")
    print("   - 个性化坐姿评估")
    print("   - 不同年龄用户适配")
    print("   - 学习习惯分析")
    print()
    print("6. 🔧 基础功能测试")
    print("   - 摄像头功能测试")
    print("   - 坐姿检测性能测试")
    print("   - 系统稳定性测试")
    print()
    print("7. 📊 项目文档查看")
    print("   - 系统架构说明")
    print("   - 硬件清单")
    print("   - 使用说明")
    print()
    print("8. 🛠️ 安装语音识别依赖")
    print("   - 自动安装SpeechRecognition")
    print("   - 安装pyaudio和pyttsx3")
    print("   - 检查系统兼容性")
    print("="*50)

def install_voice_dependencies():
    """安装语音识别依赖"""
    print("\n🔧 安装语音识别依赖包...")
    print("="*50)
    
    dependencies = [
        "SpeechRecognition",
        "pyaudio", 
        "pyttsx3"
    ]
    
    for dep in dependencies:
        print(f"📦 正在安装 {dep}...")
        try:
            result = subprocess.run([
                sys.executable, "-m", "pip", "install", dep
            ], capture_output=True, text=True)
            
            if result.returncode == 0:
                print(f"✅ {dep} 安装成功")
            else:
                print(f"❌ {dep} 安装失败: {result.stderr}")
                
        except Exception as e:
            print(f"❌ 安装 {dep} 时出错: {e}")
    
    print("\n🔍 验证安装...")
    try:
        import speech_recognition as sr
        import pyttsx3
        print("✅ 语音识别库验证通过")
        
        # 测试麦克风
        print("🎤 测试麦克风设备...")
        for i, microphone_name in enumerate(sr.Microphone.list_microphone_names()):
            print(f"   {i}: {microphone_name}")
            
        print("✅ 语音识别环境配置完成")
        
    except ImportError as e:
        print(f"❌ 验证失败: {e}")
        print("💡 请手动安装依赖或检查系统兼容性")

def run_module(choice):
    """运行选定的模块"""
    print(f"\n🚀 启动模块 {choice}...")
    print("="*50)
    
    try:
        if choice == "1":
            # 完整系统仿真
            if os.path.exists("仿真测试/simulator_python.py"):
                subprocess.run([sys.executable, "仿真测试/simulator_python.py"])
            else:
                print("❌ 仿真文件不存在")
        
        elif choice == "2":
            # 语音识别集成版本
            if os.path.exists("智能学习桌_语音版.py"):
                subprocess.run([sys.executable, "智能学习桌_语音版.py"])
            else:
                print("❌ 语音版本文件不存在")
        
        elif choice == "3":
            # 语音识别模块测试
            if os.path.exists("语音识别模块.py"):
                subprocess.run([sys.executable, "语音识别模块.py"])
            else:
                print("❌ 语音识别模块文件不存在")
        
        elif choice == "4":
            # 摄像头坐姿检测
            if os.path.exists("摄像头坐姿检测模块/posture_detection.py"):
                subprocess.run([sys.executable, "摄像头坐姿检测模块/posture_detection.py"])
            else:
                print("❌ 坐姿检测文件不存在")
        
        elif choice == "5":
            # 自适应学习测试
            if os.path.exists("摄像头坐姿检测模块/adaptive_learning_test.py"):
                subprocess.run([sys.executable, "摄像头坐姿检测模块/adaptive_learning_test.py"])
            else:
                print("❌ 自适应学习测试文件不存在")
        
        elif choice == "6":
            # 基础功能测试
            if os.path.exists("摄像头坐姿检测模块/basic_test.py"):
                subprocess.run([sys.executable, "摄像头坐姿检测模块/basic_test.py"])
            else:
                print("❌ 基础测试文件不存在")
        
        elif choice == "7":
            # 项目文档查看
            docs = [
                "学习桌小助手功能：.md",
                "智能学习桌硬件清单.md",
                "AI_API推荐方案.md",
                "API选择对比表.md"
            ]
            
            print("📚 可用文档:")
            for i, doc in enumerate(docs, 1):
                if os.path.exists(doc):
                    print(f"{i}. {doc}")
            
            doc_choice = input("\n选择要查看的文档 (输入数字): ").strip()
            try:
                doc_index = int(doc_choice) - 1
                if 0 <= doc_index < len(docs) and os.path.exists(docs[doc_index]):
                    with open(docs[doc_index], 'r', encoding='utf-8') as f:
                        content = f.read()
                        print(f"\n📖 {docs[doc_index]} 内容:")
                        print("="*60)
                        print(content[:2000])  # 显示前2000字符
                        if len(content) > 2000:
                            print("\n... (内容过长，仅显示部分)")
                else:
                    print("❌ 文档不存在或选择无效")
            except ValueError:
                print("❌ 无效选择")
        
        elif choice == "8":
            # 安装语音识别依赖
            install_voice_dependencies()
        
        else:
            print("❌ 无效选择")
            
    except FileNotFoundError:
        print("❌ 找不到指定的模块文件")
    except Exception as e:
        print(f"❌ 运行模块时出错: {e}")

def main():
    """主函数"""
    while True:
        print_banner()
        print_menu()
        
        choice = input("\n请选择要运行的模块 (1-8, 或 'q' 退出): ").strip()
        
        if choice.lower() == 'q':
            print("👋 感谢使用AIOT智能学习桌项目！")
            break
        
        if choice in ['1', '2', '3', '4', '5', '6', '7', '8']:
            run_module(choice)
            
            # 运行完成后询问是否继续
            continue_choice = input("\n是否继续使用其他功能？(y/n): ").strip().lower()
            if continue_choice != 'y':
                print("👋 感谢使用！")
                break
        else:
            print("❌ 无效选择，请重新输入")
            time.sleep(2)

if __name__ == "__main__":
    main() 